#pragma once

#include <vex/functional/contract/signal.h>

namespace vex { namespace functional { namespace contract {
    /// <summary>
    /// Invokable signal. Used mainly in service contract implementations which
    /// expose signal as a endpoint to multicast services.
    /// </summary>
    template<class TSignature>
    struct VEX_ABSTRACT invokable_signal
        : public signal<TSignature>
        , public delegate<TSignature>
    {
        VEX_PROTECT_CONTRACT(invokable_signal);
    };
}}}